home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / e / ddmoduls.lha / dd_Modules / dd_gui / dd_screen.e < prev    next >
Text File  |  1995-10-29  |  5KB  |  182 lines

  1. OPT MODULE
  2.  
  3. MODULE 'intuition/intuition','intuition/screens'
  4. MODULE 'graphics/text','graphics/modeid'
  5. MODULE 'exec/lists'
  6. MODULE 'exec/nodes'
  7. MODULE 'exec/ports'
  8. MODULE 'utility'
  9. MODULE 'utility/tagitem'
  10. MODULE 'gadtools'
  11.  
  12. SET DD_SCREEN_FLAG_LOCK
  13.  
  14. EXPORT ENUM
  15.   DD_SCREEN_DUMMY=TAG_USER,
  16.   DD_SCREEN,
  17.   DD_SCREEN_PUBNAME,
  18.   DD_SCREEN_TITLE,
  19.   DD_SCREEN_CLONE,
  20.   DD_SCREEN_DRAWINFO,
  21.   DD_SCREEN_VISUALINFO,
  22.   DD_SCREEN_BORDERLEFT,
  23.   DD_SCREEN_BORDERTOP,
  24.   DD_SCREEN_BORDERRIGHT,
  25.   DD_SCREEN_BORDERBOTTOM
  26.  
  27. EXPORT OBJECT dd_screen
  28.   screen:PTR TO screen
  29.   drawinfo:PTR TO drawinfo
  30.   screenfont:PTR TO textfont
  31.   pubsignal:CHAR
  32.   flags:CHAR
  33. ENDOBJECT
  34.  
  35. EXPORT PROC getAttr(attrid,storageptr=NIL) OF dd_screen
  36.   DEF result=0
  37.   DEF attr=0
  38.   IF self.screen
  39.     SELECT attrid
  40.     CASE DD_SCREEN
  41.       attr:=self.screen
  42.       result:=TRUE
  43.     CASE DD_SCREEN_DRAWINFO
  44.       attr:=self.drawinfo
  45.       result:=TRUE
  46.     CASE DD_SCREEN_BORDERTOP
  47.       attr:=self.screen.wbortop+self.screen.font.ysize+1
  48.       result:=TRUE
  49.     CASE DD_SCREEN_BORDERLEFT
  50.       attr:=self.screen.wborleft
  51.       result:=TRUE
  52.     CASE DD_SCREEN_BORDERBOTTOM
  53.       attr:=self.screen.wborbottom
  54.       result:=TRUE
  55.     CASE DD_SCREEN_BORDERRIGHT
  56.       attr:=self.screen.wborright
  57.       result:=TRUE
  58.     DEFAULT
  59.       result:=FALSE
  60.     ENDSELECT
  61.     IF result AND (storageptr<>0)
  62.       PutLong(storageptr,attr)
  63.     ENDIF
  64.   ENDIF
  65. ENDPROC IF result THEN attr ELSE 0,result
  66.  
  67. EXPORT PROC new(taglist=NIL) OF dd_screen
  68.   DEF pubname=NIL
  69.   -> we need a pubscreen pointer to lock or clone
  70.   IF pubname:=GetTagData(DD_SCREEN_PUBNAME,0,taglist)
  71.     -> are we gonna clone this screen?
  72.     IF GetTagData(DD_SCREEN_CLONE,FALSE,taglist)
  73.       self.clonepubscreen(pubname,GetTagData(DD_SCREEN_TITLE,0,taglist))
  74.     ELSE
  75.       self.flags:=self.flags OR DD_SCREEN_FLAG_LOCK
  76.       self.screen:=LockPubScreen(pubname)
  77.     ENDIF
  78.   ENDIF
  79. ENDPROC
  80.  
  81. EXPORT PROC clonepubscreen(sourcepubname,clonescreentitle,clonedepth=0,clonepubname=NIL) OF dd_screen
  82.   DEF sourcescreen=NIL:PTR TO screen,clonescreen=NIL:PTR TO screen
  83.   DEF sourcefontname=NIL,clonefontname=NIL,sourcetextattr:PTR TO textattr
  84.   DEF sourcefont=NIL:PTR TO textfont,clonefont=NIL:PTR TO textfont
  85.   DEF modeid=0,drawinfo=NIL:PTR TO drawinfo
  86.  
  87.   IF self.screen=NIL
  88.     self.screenfont:=NIL
  89.     IF sourcescreen:=LockPubScreen(sourcepubname)
  90.       IF drawinfo:=GetScreenDrawInfo(sourcescreen)
  91.         sourcefont:=drawinfo.font
  92.         IF (modeid:=GetVPModeID(sourcescreen.viewport))<>INVALID_ID
  93.           sourcefontname:=sourcefont.mn.ln.name
  94.           IF clonefontname:=String(StrLen(sourcefontname))
  95.             StrCopy(clonefontname,sourcefontname)
  96.             sourcetextattr:=[clonefontname,sourcefont.ysize,sourcefont.style,sourcefont.flags]:textattr
  97.             IF clonefont:=OpenFont(sourcetextattr)
  98.               self.pubsignal:=AllocSignal(-1)
  99.               IF clonescreen:=OpenScreenTagList(NIL,[
  100.                 SA_WIDTH,sourcescreen.width,
  101.                 SA_HEIGHT,sourcescreen.height,
  102.                 SA_DEPTH,IF clonedepth THEN clonedepth ELSE drawinfo.depth,
  103.                 SA_OVERSCAN,OSCAN_TEXT,
  104.                 SA_AUTOSCROLL,TRUE,
  105.                 SA_FONT,sourcetextattr,
  106.                 SA_PENS,drawinfo.pens,
  107.                 SA_DISPLAYID,modeid,
  108.                 SA_TITLE,clonescreentitle,
  109.                 SA_PUBNAME,clonepubname,
  110.                 IF (self.pubsignal<>-1) THEN SA_PUBSIG ELSE TAG_IGNORE,self.pubsignal,
  111.                 TAG_DONE
  112.                 ])
  113.                 self.screen:=clonescreen
  114.                 self.screenfont:=clonefont
  115.               ENDIF
  116.             ENDIF
  117.           ENDIF
  118.         ENDIF
  119.         FreeScreenDrawInfo(sourcescreen,drawinfo) BUT drawinfo:=NIL
  120.       ENDIF
  121.       UnlockPubScreen(NIL,sourcescreen) BUT sourcescreen:=NIL
  122.       self.drawinfo:=GetScreenDrawInfo(self.screen)
  123.     ENDIF
  124.   ENDIF
  125. ENDPROC self.screen<>NIL
  126.  
  127. EXPORT PROC end() OF dd_screen
  128.   DEF fontname
  129.   IF self.drawinfo
  130.     FreeScreenDrawInfo(self.screen,self.drawinfo)
  131.     self.drawinfo:=0
  132.   ENDIF
  133.   IF self.screen
  134.     IF self.flags AND DD_SCREEN_FLAG_LOCK
  135.       UnlockPubScreen(0,self.screen)
  136.     ELSE
  137.       IF (self.pubsignal<>-1)
  138.         WHILE (CloseScreen(self.screen)=FALSE) DO Wait(Shl(1,self.pubsignal))
  139.       ELSE
  140.         WHILE (CloseScreen(self.screen)=FALSE) DO Delay(50)
  141.       ENDIF
  142.     ENDIF
  143.   ENDIF
  144.   self.screen:=NIL
  145.   IF (self.pubsignal<>-1)
  146.     FreeSignal(self.pubsignal)
  147.     self.pubsignal:=-1
  148.   ENDIF
  149.   IF self.screenfont
  150.     fontname:=self.screenfont.mn.ln.name
  151.     CloseFont(self.screenfont)
  152.     self.screenfont:=NIL
  153.     DisposeLink(fontname)
  154.     fontname:=NIL
  155.   ENDIF
  156. ENDPROC
  157.  
  158. PROC getcloneinfo(screen:PTR TO screen)
  159.   DEF di:PTR TO drawinfo, clonedepth=0
  160.   IF di:=GetScreenDrawInfo(screen)
  161.     clonedepth:=di.depth
  162.     FreeScreenDrawInfo(screen,di)
  163.   ENDIF
  164. ENDPROC clonedepth,screen.width,screen.height
  165.  
  166. EXPORT PROC backdropwindow(screen:PTR TO screen,idcmp=0,flags=0)
  167.   DEF wnd=NIL:PTR TO window
  168.   IF (wnd:=OpenWindowTagList(NIL,
  169.     [WA_LEFT,0,
  170.      WA_TOP,0,
  171.      WA_WIDTH,screen.width,
  172.      WA_HEIGHT,screen.height,
  173.      WA_IDCMP,idcmp,
  174.      WA_FLAGS,flags OR $1900,
  175.      WA_TITLE,'',
  176.      WA_CUSTOMSCREEN,screen,
  177.      NIL]))=NIL THEN Raise("WIN")
  178.   stdrast:=wnd.rport
  179. ENDPROC wnd
  180.  
  181.  
  182.